#!/usr/bin/python3
import tkinter as tk
from tkinter import filedialog, messagebox
import excel.RepeatLine as RepeatLine


# from excel.RepeatLine as RepeatLine
class ToolApp:
    def __init__(self, root):
        # 初始化主窗口
        self.root = root
        self.root.title("小工具集合")  # 设置窗口标题
        self.root.geometry("600x400")  # 设置窗口初始大小为600x400

        # 初始化主界面
        self.create_main_interface()

    def create_main_interface(self):
        # 清空当前窗口的所有内容
        self.clear_window()

        # 创建主界面内容
        self.main_frame = tk.Frame(self.root)  # 创建一个Frame作为主界面的容器
        self.main_frame.pack(pady=20)  # 使用pack布局，上下留出20像素的间距

        # 使用grid布局管理器，将主界面分为两列
        self.main_frame.grid_columnconfigure(0, weight=1)  # 设置第0列的权重为1，使其可以随窗口大小变化
        self.main_frame.grid_columnconfigure(1, weight=1)  # 设置第1列的权重为1

        # 创建工具A的入口按钮
        self.tool_a_button = tk.Button(self.main_frame, text="Excel重复行", command=self.open_tool_a)
        # 使用grid布局，将按钮放置在第0行第0列，左右留出20像素间距，上下留出10像素间距
        self.tool_a_button.grid(row=0, column=0, padx=20, pady=10, sticky="ew")  # sticky="ew"表示按钮宽度会填充整个单元格

    def open_tool_a(self):
        # 清空当前窗口的所有内容
        self.clear_window()

        # 创建工具A界面
        self.tool_a_frame = tk.Frame(self.root)  # 创建一个Frame作为工具A界面的容器
        # 使用pack布局，上下左右留出20像素的间距，填充整个窗口，并随窗口大小变化
        self.tool_a_frame.pack(pady=20, padx=20, fill="both", expand=True)

        # 使用grid布局管理器，设置列和行的权重
        self.tool_a_frame.grid_columnconfigure(0, weight=1)  # 设置第0列的权重为1
        self.tool_a_frame.grid_columnconfigure(1, weight=1)  # 设置第1列的权重为1
        self.tool_a_frame.grid_rowconfigure(4, weight=1)  # 设置第5行的权重为1，用于多行文本框的布局

        # 文件选择控件
        self.source_file_button = tk.Button(self.tool_a_frame, text="选择源文件",
                                            command=lambda: self.select_file(self.source_file_path_entry))
        # 使用grid布局，放置在第0行第1列，左右留出10像素间距，上下留出5像素间距
        self.source_file_button.grid(row=0, column=0, padx=10, pady=5, stick="e")

        self.source_file_path_entry = tk.Entry(self.tool_a_frame)
        # 使用grid布局，放置在第1行第0列和第1列，左右填充，上下留出5像素间距
        self.source_file_path_entry.grid(row=0, column=1, columnspan=2, sticky="w", pady=5)

        # 文件选择控件
        self.target_file_button = tk.Button(self.tool_a_frame, text="选择目标文件",
                                            command=lambda: self.select_file(self.target_file_path_entry))
        # 使用grid布局，放置在第0行第1列，左右留出10像素间距，上下留出5像素间距
        self.target_file_button.grid(row=1, column=0, padx=10, pady=5, stick="e")

        self.target_file_path_entry = tk.Entry(self.tool_a_frame)
        # 使用grid布局，放置在第1行第0列和第1列，左右填充，上下留出5像素间距
        self.target_file_path_entry.grid(row=1, column=1, columnspan=2, sticky="w", pady=5)

        # 数值输入框
        self.head_line_number_label = tk.Label(self.tool_a_frame, text="标题所占行数：")  # 创建标签
        self.head_line_number_label.grid(row=2, column=0, sticky="e", pady=5)  # 放置在第2行第0列

        self.head_line_number_entry = tk.Entry(self.tool_a_frame)  # 创建单行输入框
        self.head_line_number_entry.grid(row=2, column=1, sticky="w", pady=5)  # 放置在第2行第1列
        self.head_line_number_entry.insert(0, "1")

        # 单行文本框
        self.repeat_line_number_label = tk.Label(self.tool_a_frame, text="数据行重复数：")
        self.repeat_line_number_label.grid(row=3, column=0, sticky="e", pady=5)

        self.repeat_line_number_entry = tk.Entry(self.tool_a_frame)
        self.repeat_line_number_entry.grid(row=3, column=1, sticky="w", pady=5)

        # 确定按钮
        self.confirm_button = tk.Button(self.tool_a_frame, text="确定", command=self.on_tool_a_confirm)
        self.confirm_button.grid(row=4, column=0, padx=10, pady=10, sticky="e")

        # 返回按钮
        self.back_button = tk.Button(self.tool_a_frame, text="返回", command=self.create_main_interface)
        self.back_button.grid(row=4, column=1, padx=10, pady=10, sticky="w")

    def select_file(self, file_path_entry):
        # 打开文件选择对话框
        file_path = filedialog.askopenfilename()
        if file_path:  # 如果用户选择了文件
            self.modify_entry(file_path_entry, file_path)

    def modify_entry(self, entry, context):
        # 清除输入框中的所有内容
        entry.delete(0, tk.END)
        # 在输入框中插入新内容
        entry.insert(0, context)

    def on_tool_a_confirm(self):
        # 获取用户输入的内容
        source_file_path = self.source_file_path_entry.get()  # 获取文件路径
        target_file_path = self.target_file_path_entry.get()  # 获取文件路径
        head_line_number = self.head_line_number_entry.get()  # 获取数值输入框的内容
        repeat_line_number = self.repeat_line_number_entry.get()  # 获取单行文本框的内容

        # 弹出消息框显示输入内容
        messagebox.showinfo("工具A结果", f"源文件路径: {source_file_path}\n"
                                     f"目标文件路径: {target_file_path}\n"
                                     f"标题所占行数: {head_line_number}\n"
                                     f"数据行重复数: {repeat_line_number}\n")

        RepeatLine.repeat_line(source_file_path, target_file_path, int(head_line_number), int(repeat_line_number))

    def clear_window(self):
        # 清空当前窗口的所有内容
        for widget in self.root.winfo_children():
            widget.destroy()


if __name__ == "__main__":
    root = tk.Tk()  # 创建主窗口
    app = ToolApp(root)  # 初始化应用程序
    root.mainloop()  # 启动主事件循环
